/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package trabalhoconclusaocurso;

/**
 *
 * @author matheus
 */
public class ColoniaFormigas {

   private Formiga formiga[];
   private int n_de_cidades;
   

    public ColoniaFormigas(int numero_de_cidade){
       this.n_de_cidades = numero_de_cidade;    //nesse momento eu preciso do n_cidades
    }
    public void ColoniaFormigas(double matrizPesoCidade[][], double matrizInformacao[][], double matrizFeromonio[][], double matrizValorHeuristico[][]){

         //variaveis
             int unidadeIteracao = 0;
             int iteracoes = 4;//numero de iteracoes
             this.formiga = new Formiga[this.n_de_cidades];
             
             //criando objetos
             ConstruaSolucoes construaSolucoes = new ConstruaSolucoes();
             AtualizeEstatisticas atualize_estatisticas = new AtualizeEstatisticas();
             AtualizeFeromonio atualize_feromonio = new AtualizeFeromonio();
             AtualizaMatrizInfo atualizaMatrizinfo = new AtualizaMatrizInfo();


        try{
            
             //construção do vetor formigas
             this.formiga = CriandoVetorFormiga(this.formiga);
          
              //chamada de métodos
            do{
                //construção de objetos
                construaSolucoes.ConstruaSoluções(this.formiga, matrizPesoCidade, matrizInformacao);
                atualize_estatisticas.AtualizeEstatisticas(this.formiga, unidadeIteracao);
                atualize_feromonio.AtualizeFeromonio(this.formiga, matrizFeromonio);
                matrizFeromonio = atualize_feromonio.getAtualizaFeromonio();
                atualizaMatrizinfo.atualizaMatrizInfo(this.formiga.length,  matrizFeromonio,  matrizValorHeuristico, matrizInformacao);
                matrizInformacao = atualizaMatrizinfo.getAtualizaMatrizInfo();
              unidadeIteracao++;
           }while(unidadeIteracao < iteracoes);

             //Saida
             Saida saida = new Saida();
             System.out.println("menordistancia ");
             saida.imprimaMenorDistancia(atualize_estatisticas.getmenorDistancia());
             System.out.println("menor percuso");
             saida.imprimaMenorPercurso(formiga, atualize_estatisticas.getMenorPercuso());
             

          }catch(Exception e){
            System.out.println("erro colonia formigas");
         }//fim do try
       
    }//fim do metodo
    public Formiga[] CriandoVetorFormiga(Formiga[] formiga){
            
        try{

            for ( int num_formigas = 0;  num_formigas < formiga.length; num_formigas++) {
                formiga[num_formigas] = new Formiga(formiga.length);
            }

        }catch(Exception e){
            System.out.println("erro inicializaVetorFormiga ");
        }
         return formiga;
    }
    
}//fim da Classe
